Tips&Tricks I trucchi del mestiere

 

Come creare un'icona partendo da un'immagine


Semplice ma funzionale! Poche righe di codice Visual Basic .NET per creare un'icona da un'immagine JPG o BMP. Nell'esempio, al click di un bottone,denominato button1, viene richiamata una procedura (Crea_Icona) che trasforma l'immagine web.jpg (contenuta nel medesimo percorso dell'applicazione) in una classica icona Windows.
Tip fornito dal Sig. E.Mattei

Option Explicit

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As 
System.EventArgs) Handles Button1.Click
        Crea_Icona(Directory.GetCurrentDirectory & "\web.jpg")
End Sub

Public Sub Crea_Icona(ByVal StrPercorso As String)
        Dim bmp As New Bitmap(StrPercorso)
        Dim img As IntPtr = bmp.GetHicon
        Dim ico As Icon = Icon.FromHandle(img)
        Dim fStream As New FileStream(Directory.GetCurrentDirectory & 
"\web.ico", FileMode.Create)
        ico.Save(fStream)
        fStream.Flush()
        fStream.Close()
        MsgBox("Icona Creata", MsgBoxStyle.Information, "Creazione Icone")
End Sub



Come gestire la taskbar


Una serie funzioni utili a visualizzare ed a gestire un'icona nella task bar. Il tutto funziona tramite la chiamata alla funzione API "Shell_NotifyIcon" della libreria "shell32" e alla dichiarazione del tipo dato "NOTIFYICONDATA".
Tip fornito dal sig. M.Garbujo

'Dichiarazione della struttura per la gestione dell'Icona di notifica
Private Type NOTIFYICONDATA
   cbSize As Long
   hWnd As Long
   uId As Long
   uFlags As Long
   uCallBackMessage As Long
   hIcon As Long
   szTip As String * 64
End Type

'Comandi per l'inserimento, la modifica e cancellazione dell'Icona di notifica
Private Const NIM_ADD = &H0

Private Const NIM_MODIFY = &H1

Private Const NIM_DELETE = &H2


'Ritorno informazioni del mouse integrate con l'Icona di Notifica
Private Const WM_MOUSEMOVE = &H200

Private Const WM_LBUTTONDOWN = &H201     'Pulsante sinistro gi∙
Private Const WM_LBUTTONUP = &H202       'Pulsante sinistro su
Private Const WM_LBUTTONDBLCLK = &H203   'Doppio click pulsante sinistro
Private Const WM_RBUTTONDOWN = &H204     'Pulsante destro gi∙
Private Const WM_RBUTTONUP = &H205       'Pulsante destro su
Private Const WM_RBUTTONDBLCLK = &H206   'Doppio click pulsante destro

'Valori dei flag per attivare il messaggio, l'icona ed il tooltip
Private Const NIF_MESSAGE = &H1

Private Const NIF_ICON = &H2

Private Const NIF_TIP = &H4



'Dichiarazione della chiamata alla funzione API
Private Declare Function Shell_NotifyIcon Lib "shell32" Alias "Shell_NotifyIconA" _
   (ByVal dwMessage As Long, pnid As NOTIFYICONDATA) As Boolean

Dim nid As NOTIFYICONDATA

      
Public Sub AddIconaNotifica()
   nid.cbSize = Len(nid)
   nid.hWnd = Form1.hWnd
   nid.uId = vbNull
   nid.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
   nid.uCallBackMessage = WM_MOUSEMOVE
   nid.hIcon = Form1.Icon
   nid.szTip = "Icona di notifica" & vbNullChar

   Shell_NotifyIcon NIM_ADD, nid
End Sub

Private Sub DeleteIconaNotifica()
   Shell_NotifyIcon NIM_DELETE, nid
End Sub



Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Dim msg As Long
    Dim sToolTip As String
    
    msg = X / Screen.TwipsPerPixelX
    Select Case msg
       Case WM_LBUTTONDOWN
       Case WM_LBUTTONUP
       Case WM_LBUTTONDBLCLK
            MsgBox "E' stato premuto il tasto sinistro"
       Case WM_RBUTTONDOWN
          sToolTip = InputBox("Inserire il nuovo tooltip:", "Conferma")
          If sToolTip <> "" Then
             nid.szTip = sToolTip & vbNullChar
             Shell_NotifyIcon NIM_MODIFY, nid
          End If
       Case WM_RBUTTONUP
       Case WM_RBUTTONDBLCLK
    End Select
End Sub



Un download manager


Spesso Φ capitato di progettare applicazioni che necessitano di interagire con internet per lo scarico di file, purtroppo non tutti hanno a propria disposizione una connessione a banda larga e, di conseguenza, quando le dimensioni dei download superano qualche mega, il tempo necessario per completare l'operazione non si riduce a pochi minuti, senza contare che si potrebbero avere delle disconnessioni accidentali, e se non si utilizzano programmi tipo "GetRight", tutto il lavoro di download potrebbe andare perso. La classe qui presentata permette di downloadare file, con la possibilitα di fermare l'operazione di download in qualsiasi momento, e di riprendere l'operazione in seguito; altres∞, se accidentalmente si perde la connessione, tutto ci≥ che si Φ scaricato non viene perso, poichΘ viene effettuare una copia dei file nella cartella temporanea denominata "C:\Down_". Trovate il progetto completo nella directory tips del Cd-Rom allegato o sul Web: cdrom.ioprogrammo.it
Tip fornito dal sig. P. Libro

Una funzione per chiamare un numero telefonico


Spesso, per comporre un numero telefonico da Visual Basic, si ricorre al componente OCX MSCOMM32, che se opportunamente configurato consente di gestire il modem per comporre un numero telefonico; tuttavia, esiste una particolare API, tapiRequestMakeCall, che consente di effettuare la medesima operazione in modo molto pi∙ semplice e immediato.
Tip fornito dalla Sig.ra N. Martire

Option Explicit
Private Declare Function tapiRequestMakeCall& Lib "TAPI32.DLL" (ByVal DestAddress$, ByVal AppName$, ByVal CalledParty$, ByVal Comment$)
Private Const TAPIERR_NOREQUESTRECIPIENT = -2&
Private Const TAPIERR_REQUESTQUEUEFULL = -3&
Private Const TAPIERR_INVALDESTADDRESS = -4&

Private Sub cmdChiama_Click()
    Dim Strtemp As String
    Dim nResult As Long
    
    nResult = tapiRequestMakeCall&(Trim$(txtNumero), CStr(Caption), "Test telefono", "")
 
    If nResult <> 0 Then
        Strtemp = "Errore durante la composizione del numero: "
        Select Case nResult
            Case TAPIERR_NOREQUESTRECIPIENT
                Strtemp = Strtemp & "Non Φ possibile avviare l'applicazione Windows si supporto"
            Case TAPIERR_REQUESTQUEUEFULL
                Strtemp = Strtemp & "Il sistema Φ attualmente impegnato in altre composizioni telefoniche"
            Case TAPIERR_INVALDESTADDRESS
                Strtemp = Strtemp & "Il numero telefonico non Φ corretto"
            Case Else
                Strtemp = Strtemp & "Errore sconosciuto"
        End Select
        MsgBox Strtemp
    End If

End Sub

Private Sub Form_Load()
    Abilita_Chiamata
End Sub

Private Sub cmdExit_Click()
    Unload Me
End Sub

Private Sub Abilita_Chiamata()
    cmdChiama.Enabled = Len(Trim$(txtNumero)) > 0
End Sub

Private Sub txtNumero_Change()
    Abilita_Chiamata
End Sub